package com.itheima.demo01;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class FileDemo04 {
    public static void main(String[] args) {
        //文件不同文件格式的个数
        File file = new File("D:\\Qt\\Qt5.12.0\\Docs\\Qt-5.12.0");
        HashMap<String, Integer> fileFormatCount = getFileFormatCount(file);
        System.out.println(fileFormatCount);
    }

    public static HashMap<String, Integer> getFileFormatCount(File file) {
        //创建Map存放文件格式
        HashMap<String, Integer> hm = new HashMap<>();

        //1.获取file文件
        File[] files = file.listFiles();

        //递归遍历
        //判断是否是文件
        //如果是文件就存入 hm 中
        assert files != null;
        for (File file1 : files) {
            if (file1.isFile()) {
                //是文件 获取后缀名
                String name = file1.getName();
                String[] split = name.split("\\.");//把文件名称按 . 进行切割成数组
                //获取数组最后一个索引的值
                String s = split[split.length - 1];
                //得到文件后缀名之后
                //判断在hm是存在
                if (hm.containsKey(s)) {
                    //存在
                    int count = hm.get(s);
                    count++;
                    hm.put(s, count);
                } else {
                    //不存在
                    hm.put(s, 1);
                }
            } else {
                //否则 递归
                HashMap<String, Integer> childHm = getFileFormatCount(file1); //这里需要接收子级目录的返回数据

                for (Map.Entry<String, Integer> entry : childHm.entrySet()) {
                    String name = entry.getKey();
                    int value = entry.getValue();
                    if (hm.containsKey(name)){
                        int count = hm.get(name);
                        count = count + value;
                        hm.put(name,count);
                    }else {
                        hm.put(name,value);
                    }
                }

            }
        }

        return hm;
    }
}













